package cn.tedu.blog.server.service;

import cn.tedu.blog.server.pojo.dto.MenuAddNewDTO;
import cn.tedu.blog.server.pojo.vo.MenuListVO;
import cn.tedu.blog.server.pojo.vo.MenusTreeVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @Author: 雷茂林
 * @Date:2022/7/17 10:02
 * @Description: 权限管理-业务逻辑接口
 */
public interface IMenuService {

    /**
     * 创建菜单
     * @param menuAddNewDTO
     * @return
     */
    @Transactional
    void createMenu(MenuAddNewDTO menuAddNewDTO);



    /**
     * 删除权限
     */
    @Transactional
    void deleteById(Long id);



    /**
     * 根据权限id批量删除权限项
     * @param ids
     * @return
     */
    @Transactional
    void deleteByIds(List<Long> ids);



    /**
     * 修改权限
     */
    @Transactional
    void updateById(MenuAddNewDTO menuAddNewDTO);



    /**
     * 修改当前权限及其子级状态
     * @param menuAddNewDTO
     * @return
     */
    @Transactional
    void switchPermission(MenuAddNewDTO menuAddNewDTO);



    /**
     * 判断：根据id判断当前权限是否存在子级权限
     */
    void isSonMenuById(Long id);


    /**
     * 查询所有数据数量，用于计算页码
     * @return
     */
    int getCountAll(MenuListVO menuListVO);



    /**
     * 根据菜单ID查询完成数据回填
     * @param id
     * @return
     */
    MenuListVO getBackFillById(Long id);



    /**
     * 条件分页查询
     * @param menuListVO
     * @return
     */
    List<MenuListVO> listByKeyword(MenuListVO menuListVO);



    /**
     * 首页查询分类树
     * 需要返回固定结构
     */
    MenusTreeVO categoryTree();



    /**
     * 根据父级权限id判断该父级权限是否是三级菜单最后一级
     * @param parentId
     * @return
     */
    void isViolationMenuTree(Long menuId ,Long parentId);

}